MCP 문서 관리

메뉴

Discord

Discord

Discord MCP 서버는 봇을 통해 Discord 길드(서버)에 연결하고 채널에서 메시지를 읽고 쓸 수 있는 Model Context Protocol 서버입니다. 이 서버를 통해 AI 어시스턴트는 Discord 커뮤니티와 상호작용하고, 메시지를 모니터링하며, 자동화된 응답을 제공할 수 있습니다.

특징

  • Discord 길드 연결 및 관리
  • 텍스트 채널 메시지 읽기 및 쓰기
  • 음성 채널 상태 모니터링
  • 직접 메시지(DM) 처리
  • 이모지 반응 관리
  • 채널 및 카테고리 관리
  • 역할(Role) 및 권한 설정
  • 사용자 정보 확인 및 관리
  • 멤버 조회 및 상호작용
  • 이벤트 생성 및 관리
  • 파일 및 미디어 업로드
  • 스레드 생성 및 관리
  • 위브훅(Webhook) 통합
  • Discord API 한도 준수

API

리소스

discord://guilds/{guild_id}

  • 특정 길드(서버)의 정보와 채널 목록을 제공합니다.

discord://channels/{channel_id}/messages

  • 특정 채널의 메시지 목록을 제공합니다.

discord://users/{user_id}

  • 특정 사용자의 정보를 제공합니다.

도구

길드 관리

list_guilds

봇이 접근할 수 있는 모든 길드를 나열합니다. - 입력: 없음 - 출력: 길드 ID, 이름, 소유자, 멤버 수 등을 포함한 길드 목록

get_guild

특정 길드의 정보를 가져옵니다. - 입력: - guild_id: 길드 ID - 출력: 길드 상세 정보

채널 관리

list_channels

길드 내의 모든 채널을 나열합니다. - 입력: - guild_id: 길드 ID - 출력: 채널 ID, 이름, 유형, 주제 등을 포함한 채널 목록

get_channel

특정 채널의 정보를 가져옵니다. - 입력: - channel_id: 채널 ID - 출력: 채널 상세 정보

create_channel

새 채널을 생성합니다. - 입력: - guild_id: 길드 ID - name: 채널 이름 - type: 채널 유형(text, voice, category 등) - topic: (선택적) 채널 주제 - position: (선택적) 채널 위치 - parent_id: (선택적) 부모 카테고리 ID - nsfw: (선택적) NSFW 채널 여부 - permission_overwrites: (선택적) 권한 재정의 설정 - 출력: 생성된 채널 정보

메시지 관리

list_messages

채널의 메시지를 나열합니다. - 입력: - channel_id: 채널 ID - limit: (선택적) 가져올 최대 메시지 수 - before: (선택적) 특정 메시지 ID 이전의 메시지만 가져오기 - after: (선택적) 특정 메시지 ID 이후의 메시지만 가져오기 - around: (선택적) 특정 메시지 ID 주변의 메시지 가져오기 - 출력: 메시지 목록

get_message

특정 메시지의 정보를 가져옵니다. - 입력: - channel_id: 채널 ID - message_id: 메시지 ID - 출력: 메시지 상세 정보

send_message

채널에 메시지를 보냅니다. - 입력: - channel_id: 채널 ID - content: 메시지 내용 - tts: (선택적) TTS(Text-to-Speech) 사용 여부 - embeds: (선택적) 임베드 객체 배열 - files: (선택적) 첨부 파일 - allowed_mentions: (선택적) 허용된 멘션 설정 - message_reference: (선택적) 답장을 위한 메시지 참조 - 출력: 전송된 메시지 정보

edit_message

기존 메시지를 편집합니다. - 입력: - channel_id: 채널 ID - message_id: 메시지 ID - content: (선택적) 새 메시지 내용 - embeds: (선택적) 새 임베드 객체 배열 - allowed_mentions: (선택적) 새 허용된 멘션 설정 - 출력: 편집된 메시지 정보

delete_message

메시지를 삭제합니다. - 입력: - channel_id: 채널 ID - message_id: 메시지 ID - reason: (선택적) 삭제 이유(감사 로그용) - 출력: 삭제 결과

add_reaction

메시지에 이모지 반응을 추가합니다. - 입력: - channel_id: 채널 ID - message_id: 메시지 ID - emoji: 이모지(유니코드 또는 사용자 지정 이모지 ID) - 출력: 반응 추가 결과

remove_reaction

메시지에서 이모지 반응을 제거합니다. - 입력: - channel_id: 채널 ID - message_id: 메시지 ID - emoji: 이모지 - user_id: (선택적) 사용자 ID(생략 시 봇 자신의 반응 제거) - 출력: 반응 제거 결과

사용자 및 멤버 관리

get_user

특정 사용자의 정보를 가져옵니다. - 입력: - user_id: 사용자 ID - 출력: 사용자 상세 정보

list_guild_members

길드의 멤버를 나열합니다. - 입력: - guild_id: 길드 ID - limit: (선택적) 가져올 최대 멤버 수 - after: (선택적) 특정 사용자 ID 이후의 멤버만 가져오기 - 출력: 멤버 목록

get_guild_member

특정 길드 멤버의 정보를 가져옵니다. - 입력: - guild_id: 길드 ID - user_id: 사용자 ID - 출력: 멤버 상세 정보

modify_guild_member

길드 멤버의 설정을 변경합니다. - 입력: - guild_id: 길드 ID - user_id: 사용자 ID - nick: (선택적) 새 닉네임 - roles: (선택적) 새 역할 ID 배열 - mute: (선택적) 음소거 여부 - deaf: (선택적) 오디오 비활성화 여부 - channel_id: (선택적) 이동할 음성 채널 ID - reason: (선택적) 변경 이유(감사 로그용) - 출력: 변경된 멤버 정보

역할 관리

list_guild_roles

길드의 역할을 나열합니다. - 입력: - guild_id: 길드 ID - 출력: 역할 목록

create_guild_role

새 역할을 생성합니다. - 입력: - guild_id: 길드 ID - name: 역할 이름 - permissions: (선택적) 권한 비트필드 - color: (선택적) RGB 색상 정수 - hoist: (선택적) 멤버 목록에서 별도로 표시할지 여부 - mentionable: (선택적) 멘션 가능 여부 - reason: (선택적) 생성 이유(감사 로그용) - 출력: 생성된 역할 정보

modify_guild_role

역할을 수정합니다. - 입력: - guild_id: 길드 ID - role_id: 역할 ID - name: (선택적) 새 역할 이름 - permissions: (선택적) 새 권한 비트필드 - color: (선택적) 새 RGB 색상 정수 - hoist: (선택적) 새 표시 설정 - mentionable: (선택적) 새 멘션 가능 여부 - reason: (선택적) 수정 이유(감사 로그용) - 출력: 수정된 역할 정보

스레드 관리

create_thread

채널에 새 스레드를 생성합니다. - 입력: - channel_id: 채널 ID - name: 스레드 이름 - auto_archive_duration: 자동 보관 시간(분) - message_id: (선택적) 스레드를 시작할 메시지 ID - type: (선택적) 스레드 유형 - invitable: (선택적) 비공개 스레드에 사용자를 초대할 수 있는지 여부 - reason: (선택적) 생성 이유(감사 로그용) - 출력: 생성된 스레드 정보

list_active_threads

길드의 활성 스레드를 나열합니다. - 입력: - guild_id: 길드 ID - 출력: 활성 스레드 목록

사용 방법

설치 및 구성

  1. 사전 요구 사항:
  2. Discord 봇 토큰
  3. Discord 개발자 포털에서 봇 생성 및 권한 설정

  4. MCP 서버 설치:

    pip install discord-mcp-server

  5. 봇 초대 링크 생성: Discord 개발자 포털에서 봇 초대 링크를 생성하여 원하는 서버에 봇을 초대합니다.

  6. Claude Desktop 구성:

    {
      "mcpServers": {
        "discord": {
          "command": "python",
          "args": ["-m", "discord_mcp"],
          "env": {
            "DISCORD_TOKEN": "your-bot-token",
            "DISCORD_INTENTS": "guilds,guild_messages,guild_members,message_content",
            "DISCORD_DEFAULT_GUILD": "your-default-guild-id",
            "DISCORD_DEFAULT_CHANNEL": "your-default-channel-id"
          }
        }
      }
    }

  7. Discord 인텐트 설정: Discord 개발자 포털에서 봇의 인텐트 설정을 구성합니다. 길드 멤버 및 메시지 내용과 같은 특권 인텐트는 별도로 활성화해야 합니다.

  8. 구성 옵션:

  9. DISCORD_TOKEN: Discord 봇 토큰 (필수)
  10. DISCORD_INTENTS: 활성화할 인텐트 목록 (쉼표로 구분)
  11. DISCORD_DEFAULT_GUILD: 기본 길드 ID
  12. DISCORD_DEFAULT_CHANNEL: 기본 채널 ID
  13. DISCORD_COMMAND_PREFIX: 명령어 접두사 (기본값: !)
  14. DISCORD_CACHE_TTL: 캐시 수명(초) (기본값: 300)
  15. DISCORD_LOG_LEVEL: 로그 수준 (기본값: INFO)
  16. DISCORD_MESSAGE_HISTORY_LIMIT: 채널당 캐시할 최대 메시지 수 (기본값: 100)

기본 사용 예시

  1. 길드 및 채널 확인:

    // 봇이 접근할 수 있는 길드 확인
    list_guilds()
    
    // 길드 내의 채널 확인
    list_channels({
      guild_id: "123456789012345678"
    })

  2. 최근 메시지 확인:

    list_messages({
      channel_id: "123456789012345678",
      limit: 10
    })

  3. 메시지 전송:

    send_message({
      channel_id: "123456789012345678",
      content: "안녕하세요! 저는 AI 어시스턴트 Claude입니다."
    })

  4. 포맷된 메시지 전송:

    send_message({
      channel_id: "123456789012345678",
      content: "안녕하세요!",
      embeds: [
        {
          title: "프로젝트 업데이트",
          description: "이번 주 업데이트 내용입니다.",
          color: 0x3498db, // 파란색
          fields: [
            {
              name: "새 기능",
              value: "- 다크 모드 추가\n- 성능 개선\n- 버그 수정"
            },
            {
              name: "담당자",
              value: "개발팀"
            }
          ],
          footer: {
            text: "2025년 5월 14일"
          }
        }
      ]
    })

  5. 메시지에 반응 추가:

    add_reaction({
      channel_id: "123456789012345678",
      message_id: "987654321098765432",
      emoji: "👍" // 또는 사용자 지정 이모지: "emoji_name:emoji_id"
    })

  6. 스레드 생성 및 메시지 전송:

    // 메시지에서 스레드 생성
    const thread = create_thread({
      channel_id: "123456789012345678",
      message_id: "987654321098765432",
      name: "기능 논의",
      auto_archive_duration: 1440 // 24시간
    });
    
    // 스레드에 메시지 전송
    send_message({
      channel_id: thread.id,
      content: "이 스레드에서 새 기능에 대해 논의해 봅시다."
    })

  7. 사용자 정보 확인:

    get_user({
      user_id: "123456789012345678"
    })

  8. 역할 관리:

    // 길드의 역할 목록 확인
    list_guild_roles({
      guild_id: "123456789012345678"
    });
    
    // 멤버에게 역할 부여
    modify_guild_member({
      guild_id: "123456789012345678",
      user_id: "987654321098765432",
      roles: ["765432109876543210"] // 역할 ID 배열
    })

보안 고려사항

  • Discord 봇 토큰은 매우 민감한 정보이므로 안전하게 관리해야 합니다.
  • 필요한 최소한의 권한과 인텐트만 활성화하세요.
  • 메시지 내용 인텐트는 봇이 메시지 내용을 읽을 수 있게 하는 특권 인텐트입니다. 필요한 경우에만 활성화하세요.
  • 봇이 보낼 수 있는 메시지의 내용과 형식에 제한을 두어 남용을 방지하세요.
  • Discord API 요청 한도를 초과하지 않도록 주의하세요.
  • 환경 변수나 구성 파일에 저장된 토큰을 안전하게 관리하세요.

연결된 구성 요소

  • Telegram - Telethon 통합을 통한 페이지별 채팅 읽기, 메시지 검색 및 메시지 전송 기능
  • Slack - 봇을 통해 Slack 워크스페이스에 연결하고 채널에서 메시지를 읽고 쓰는 서버
  • Google Calendar - 일정 확인, 시간 찾기, 이벤트 추가/삭제를 위한 Google Calendar 통합
  • Gmail - Claude Desktop에서 자동 인증 지원이 포함된 Gmail 통합을 위한 MCP 서버